/*
 * @Author: 赖维健(lwj1994)
 * @Date: 2022-12-13 21:16:24
 * @LastEditors: 赖维健(lwj1994)
 * @LastEditTime: 2022-12-14 00:16:37
 * @Description: rollup配置文件
 */
import path from 'path'
import babel from '@rollup/plugin-babel'
import commonjs from '@rollup/plugin-commonjs'
import resolve from '@rollup/plugin-node-resolve'
import rollupTypescript from 'rollup-plugin-typescript2'
import { terser } from 'rollup-plugin-terser'
import { DEFAULT_EXTENSIONS } from '@babel/core'

import pkg from './package.json'

const env = process.env.NODE_ENV
const name = 'LUtils'

const config = {
  input: path.resolve(__dirname, 'src/index.ts'),
  output: [
    // {
    //   file: pkg.main,
    //   format: 'cjs', //  CommonJS，适用于 Node 环境和其他打包工具（别名：commonjs）
    // },
    {
      file: pkg.main,
      format: 'es', // 将 bundle 保留为 ES 模块文件，适用于其他打包工具以及支持 <script type=module> 标签的浏览器（别名: esm，module）
    },
    {
      name, // 这个 name 属性非常重要，是通过 cdn 引入后，挂载到 window 上的属性名
      file: pkg.umd,
      format: 'umd' // 通用模块定义，生成的包同时支持 amd、cjs 和 iife 三种格式
    }
  ],
  plugins: [
    // 解析第三方依赖
    resolve(),
    // 识别 commonjs 模式第三方依赖
    commonjs(),
    // rollup 编译 typescript
    rollupTypescript(),
    // babel 配置
    babel({
      // 编译库使用 runtime
      babelHelpers: 'runtime',
      // 只转换源代码，不转换外部依赖
      exclude: 'node_modules/**',
      // babel 默认不支持 ts 需要手动添加
      extensions: [
        ...DEFAULT_EXTENSIONS,
        '.ts',
      ],
    }),
  ]
}

// 若打包正式环境，压缩代码
if (env === 'production') {
  config.plugins.push(terser({
    compress: {
      pure_getters: true,
      unsafe: true,
      unsafe_comps: true,
      warnings: false
    }
  }))
}

export default config
